package cn.openea.perpartner.meily.web.service;

import cn.openea.perpartner.common.core.web.domain.AjaxResult;
import cn.openea.perpartner.meily.web.entity.ProvideSamplesSub;
import cn.openea.perpartner.meily.web.entity.dto.MaterialDownloadDTO;
import cn.openea.perpartner.meily.web.entity.vo.ProvideSamplesSubVo;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.extension.service.IService;
import lombok.NonNull;

import java.text.ParseException;
import java.util.List;
import java.util.Map;

/**
 * @author ysk
 * @email zane_ysk@qq.com
 * @date 2023-03-27 11:37:04
 */
public interface IProvideSamplesSubService extends IService<ProvideSamplesSub> {

    /**
     * 校验是否可以报名
     *
     * @param samplesSub
     */
    JSONObject verifyRegistration(ProvideSamplesSub samplesSub);

    /**
     * 锁定名额
     *
     * @param samplesSub
     */
    AjaxResult lockedQuota(ProvideSamplesSub samplesSub);

    /**
     * 领取样品
     *
     * @param samplesSub
     */
    void receiveProvideSamples(ProvideSamplesSub samplesSub);

    /**
     * 回收名额
     */
    AjaxResult recyclingQuota(ProvideSamplesSubVo samplesSubVo);

    /**
     * 获取领取样品记录详情
     *
     * @param id
     * @return
     * @throws ParseException
     */
    ProvideSamplesSub getReceiveDetails(String id) throws ParseException;

    /**
     * 获取领取样品记录列表
     *
     * @param vo
     * @return
     */
    List<ProvideSamplesSub> getListByVo(ProvideSamplesSubVo vo);

    /**
     * 获取领取样品记录列表
     */
    List<ProvideSamplesSub> getListByMainId(String mainId);

    /**
     * 获取评级过的样品列表
     */
    List<ProvideSamplesSub> getGradeListByMainId(String mainId);

    /**
     * 确认收货
     *
     * @param id            订单记录id
     * @param currentStatus 当前的订单状态
     * @param status        收货成功后的状态
     */
    void changeOrderStatus(String id, String currentStatus, String status);

    /**
     * 保存试用反馈
     *
     * @param samplesSub
     * @return
     */
    boolean saveFeedbackContent(ProvideSamplesSub samplesSub);

    /**
     * 获取未提交反馈的记录
     *
     * @param samplesSub
     * @return
     */
    ProvideSamplesSub getNoFeedback(ProvideSamplesSub samplesSub);

    /**
     * 评级
     * @param samplesSub
     * @return
     */
    boolean rating(ProvideSamplesSub samplesSub);

    /**
     * 分页查询
     *
     * @param vo
     * @return
     */
    List<ProvideSamplesSub> findListByVo(ProvideSamplesSubVo vo);

    /**
     * 更改订单物流状态
     */
    void logisticsChangeNotify(@NonNull ProvideSamplesSub samplesSub, String action);

    /**
     * 修改收货信息
     *
     * @param provideSamplesSub
     * @return
     */
    AjaxResult modifyReceivingInfo(ProvideSamplesSub provideSamplesSub);

    /**
     * 更改对应的业务状态为已完成
     *
     * @param id
     */
    void businessStatusFinish(String id);


    /**
     * 查询某个样品的指标 如
     * evaluationNum 评级数
     * GradeANum A级人数
     */
    Map<String,Object> indicatorQuery(String mainId);

    /**
     * 获取样品试用素材
     * @param mainId 样品Id
     */
    List<MaterialDownloadDTO> generateTrialMaterialDirectory(String mainId);
}

